package com.ada.spark.rddoperator

import org.apache.spark.rdd.RDD
import org.apache.spark.{SparkConf, SparkContext}

/**
  * 作用：对源RDD进行去重后返回一个新的RDD。默认情况下，只有8个并行任务来操作，但是可以传入一个可选的numTasks参数改变它。
  */
object Spark10_distinct {

    def main(args: Array[String]): Unit = {
        //创建SparkConf
        val conf = new SparkConf().setAppName("Spark10_distinct").setMaster("local[*]")
        //创建Spark上下文对象
        val sc = new SparkContext(conf)

        val listRDD: RDD[Int] = sc.makeRDD(List(1, 2, 1, 5, 2, 9, 6, 1))

        //将RDD中一个分区的数据打乱重组到其他不同的分区操作，称之为shuffle操作
        //distinct算法会把数据打乱，重组，也就是shuffle操作
        //val distinctRDD: RDD[Int] = listRDD.distinct()

        //shuffle操作后重新指定分区数
        val distinctRDD: RDD[Int] = listRDD.distinct(2)

        //spark中所有的算子中没有shuffle的算子，性能比较快

        distinctRDD.collect().foreach(println)
    }

}
